#ifndef __CONFIG_H
#define __CONFIG_H
#include "stm32f10x.h"

typedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable 	无符号8位整型变量  */
typedef signed   char  int8;                    /* defined for signed 8-bits integer variable		有符号8位整型变量  */
typedef unsigned short uint16;                  /* defined for unsigned 16-bits integer variable 	无符号16位整型变量 */
typedef signed   short int16;                   /* defined for signed 16-bits integer variable 		有符号16位整型变量 */
typedef unsigned int   uint32;                  /* defined for unsigned 32-bits integer variable 	无符号32位整型变量 */
typedef signed   int   int32;                   /* defined for signed 32-bits integer variable 		有符号32位整型变量 */



//配置参数在flash中的存储位置，映射到64k的最后一页（每页1k）的起始处
#define FLASH_CFG_BASE_ADDR  0X0800FC00 	

//一条离线记录的字节数
//协议版本

#ifdef WEATHER_STATION_1_6		
		#define E2_RECORD_SIZE  130
		#define PROTOCOL_VERSION 5 
#endif

		 //1.6代墒情站的配置
#ifdef SOIL_MOISTURE_STATION_1_6
     #define E2_RECORD_SIZE  104
		 	#define PROTOCOL_VERSION 3 
#endif		

  //1.5代墒情站的配置
#ifdef SOIL_MOISTURE_STATION_1_5  
    #define E2_RECORD_SIZE  104
		#define PROTOCOL_VERSION 3 
#endif
		
		
 //1.5代多铜环的配置				
#ifdef MULTI_POLE_1_5           
		#define E2_RECORD_SIZE  390
		#define PROTOCOL_VERSION 1 
#endif



//E2芯片的大小
#define E2_SIZE         32768

//24c256存储时，起始偏移地址
#define E2_CFG_BASE_ADDR    20

//记录个数所占字节大小
#define E2_CFG_SIZE_RECORDCOUNT  2
//记录个数在E2中的地址
#define E2_CFG_ADDR_RECORDCOUNT  E2_CFG_BASE_ADDR

#define E2_CFG_SIZE_ALL           E2_CFG_SIZE_RECORDCOUNT

//E2芯片中存储离线数据的起始地址
#define E2_DATA_BASE_ADDR      (E2_CFG_BASE_ADDR + E2_CFG_SIZE_ALL)



//离线数据最大记录数
#define E2_MAX_RECORD_COUNT  ((E2_SIZE - E2_CFG_BASE_ADDR - E2_CFG_SIZE_ALL) / E2_RECORD_SIZE)

//DMG的配置
#pragma anon_unions
typedef struct tagDMGConfig
{
	//地址
	u8  _Address;
	union 
	{
		struct {
//		u8  _AI1Enable:1;
//		u8  _AI2Enable:1;
//		u8  _DI8Enable:1;
//		u8  _DO1Enable:1;
//		u8  _DI8Clear:1;
//		u8  :3;
			
			u8  :3;
			u8  _DI8Clear:1;
			u8  _DO1Enable:1;
			u8  _DI8Enable:1;
			u8  _AI2Enable:1;
			u8  _AI1Enable:1;
		};
		u8  _RegConfig;
	};
	//DO1延时
	u16 _DO1DelaySecond; 
}DMGConfig;


 
//独立传感器配置
//空气温湿度、SWCP1
typedef struct tagIndependentSensorConfig
{
	u8 _Address;
	u8 _Enable;
}IndependentSensorConfig;



//1.6代气象站的配置
#ifdef WEATHER_STATION_1_6
		typedef struct tagConfig
		{
					//服务器IP
					u8        _ServerIP[16];
				//服务器端口
				 u8        _ServerPort[6];	
					//采集时间间隔，以分钟为单位
				u16       _collectInterval;
					//设备编号
				u8        _DeviceNumber[16];
					//服务器域名
				u8        _ServerDN[50];


					 
					//采集高频的延时设置 
				u16    _HighFreqDelaySpan;
				 
					//采集低频的延时设置 
				u16    _LowFreqDelaySpan;
					
					//是否节能
				u16    _EnergySaving;
					
				//在线升级服务器域名
				u8        _UpdateServerDN[50] ;	 

				//在线升级服务器端口
				u8        _UpdateServerPort[6];


				 
				//10层土温的地址，每层一个地址
				u8     _SoilTempAddress[10];
				union
				{
					struct
					{
					//土温配置1-8层 
					u8    _SoilTempConfig1_8;
					//土温配置9-10层 
					u8    _SoilTempConfig9_10;
					};
					u16 _SoilTempConfig;
				};


				//1个8层铜环地址
				u8    _CopperRingAddress;

				union
				{
					struct
					{
				//铜环高频配置1-8层
				u8    _HighFreqConfig1_8;
				//铜环高频配置9-10层
				u8    _HighFreqConfig9_10;
					};
					u16 _HighFreqConfig;
				};

				union
				{
					struct
					{
				//铜环低频配置1-8层
				u8    _LowFreqConfig1_8;
				//铜环低频配置9-10层
				u8    _LowFreqConfig9_10;
					};
					u16 _LowFreqConfig;
					
				};


				//dmg2s地址
				u8   _DMG2SAddress;
				//dmg2SAI配置
				u8   _DMG2SAIConfig;

				//传感器1-4的地址
				u8   _SensorAddress1_4[4];
				//传感器1-4的寄存器地址
				u8   _SensorRegAddress1_4[4];

				//传感器5-8的地址
				u8   _SensorAddress5_8[4];
				//传感器5-8的寄存器起始地址
				u8   _SensorRegStartAddress5_8[4];

				//传感器9-11的地址
				u8   _SensorAddress9_11[3];
				//传感器9-11的寄存器起始地址
				u8   _SensorRegStartAddress9_11[3];

				//传感器1-8配置
				u8 _SensorConfig1_8;
				//传感器9-11配置
				u8 _SensorConfig9_11;

		} Config;
 
#endif


		 //1.6代墒情站的配置
#ifdef SOIL_MOISTURE_STATION_1_6
  

			typedef struct tagConfig
			{
				//服务器IP
				u8        _ServerIP[16];
			//服务器端口
			 u8        _ServerPort[6];	
				//采集时间间隔，以分钟为单位
			u16       _collectInterval;
				//设备编号
			u8        _DeviceNumber[16];
				//服务器域名
			u8        _ServerDN[50];
			//16层高频配置
			u16    _HighFreqConfig ;
			//16层低频配置
			u16    _LowFreqConfig;
			//配置土温的2个字节
			u16    _SoilTempConfig ;
				//采集高频的延时设置 
			u16    _HighFreqDelaySpan;



				//采集低频的延时设置 
			u16    _LowFreqDelaySpan;
				
				//是否节能
			u16    _EnergySaving;
				
			//在线升级服务器域名
			u8        _UpdateServerDN[50] ;	 

			//在线升级服务器端口
			u8        _UpdateServerPort[6];

			u8   SoilTempAddr1_8;
			u8   SoilTempAddr9_16;
			u16   IsNewSoilTemp;
			} Config;
#endif		

 

			//1.5代墒情站的配置
#ifdef SOIL_MOISTURE_STATION_1_5  	 

			typedef struct tagConfig
			{
				//服务器IP
				u8        _ServerIP[16];
			//服务器端口
			 u8        _ServerPort[6];	
				//采集时间间隔，以分钟为单位
			u16       _collectInterval;
				//设备编号
			u8        _DeviceNumber[16];
				//服务器域名
			u8        _ServerDN[50];
			//16层高频配置
			u16    _HighFreqConfig ;
			//16层低频配置
			u16    _LowFreqConfig;
			//配置土温的2个字节
			u16    _SoilTempConfig ;
				//采集高频的延时设置 
			u16    _HighFreqDelaySpan;



				//采集低频的延时设置 
			u16    _LowFreqDelaySpan;
				
				//是否节能
			u16    _EnergySaving;
				
			//在线升级服务器域名
			u8        _UpdateServerDN[50] ;	 

			//在线升级服务器端口
			u8        _UpdateServerPort[6];

			} Config;
#endif
		
		
 //1.5代多铜环的配置				
#ifdef MULTI_POLE_1_5           
		
		 
		typedef struct tagConfig
		{
			//服务器IP
			u8        _ServerIP[16];
		//服务器端口
		 u8        _ServerPort[6];	
			//采集时间间隔，以分钟为单位
		u16       _collectInterval;
			//设备编号
		u8        _DeviceNumber[16];
			//服务器域名
		u8        _ServerDN[50];


			 
			//采集高频的延时设置 
		u16    _HighFreqDelaySpan;
		 
			//采集低频的延时设置 
		u16    _LowFreqDelaySpan;
			
			//是否节能
		u16    _EnergySaving;
			
		//在线升级服务器域名
		u8        _UpdateServerDN[50] ;	 

		//在线升级服务器端口
		u8        _UpdateServerPort[6];


		 
		//8个8层土温的地址，每层一个地址
		u8     _SoilTempAddress[8][8];

		//配置土温 
		u16    _SoilTempConfig[8];

		//8个8层铜环地址，每个铜环一个地址
		u16    _CopperRingAddress[8];
		 
		//8个8层铜环高频配置
		u16    _HighFreqConfig[8];
		//8个8层铜环低频配置
		u16    _LowFreqConfig[8];
		 

		} Config;
#endif

		
		
		
void ConfigProcess(u8 Res);

void SaveConfig(void);
 
int ConfigHandler(void);
void LoadConfig(void);

#endif

